热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

主存|事情_105道Java面试题,认真思考对你面试很有价值!

篇首语:本文由编程笔记#小编为大家整理,主要介绍了105道Java面试题,认真思考对你面试很有价值!相关的知识,希望对你有一定的参考价值。一、Java基础

篇首语:本文由编程笔记#小编为大家整理,主要介绍了105道Java面试题,认真思考对你面试很有价值!相关的知识,希望对你有一定的参考价值。



一、Java基础

1、什么是面向对象?

2、JDK JRE JVM

3、==和equals比较

4、hashCode与equals

5、final

6、String、StringBuffer、StringBuilder

7、重载和重写的区别

8、接口和抽象类的区别

9、List和Set的区别

10、ArrayList和LinkedList区别

11、HashMap和HashTable有什么区别?其底层实现是什么?

12、ConcurrentHashMap原理,jdk7和jdk8版本的区别?

13、什么是字节码?采用字节码的好处是什么?

14、Java中的异常体系

15、Java类加载器

16、双亲委托模型

17、GC如何判断对象可以被回收

105道Java面试题答案解析:105道Java面试题完整版




选择Java基础里的其中一道解答


JDK JRE JVM

JDK:

Java Develpment Kit java 开发工具

JRE:

Java Runtime Environment java运行时环境

JVM:

java Virtual Machine java 虚拟机


二、线程、并发相关

1、线程的生命周期?线程有几种状态

2、sleep()、wait()、join()、yield()的区别

3、对线程安全的理解

4、Thread、Runable的区别

5、对守护线程的理解

6、ThreadLocal的原理和使用场景

7、ThreadLocal内存泄露原因,如何避免

8、并发、并行、串行的区别

9、并发的三大特性

10、volatile

11、为什么用线程池?解释下线程池参数?

12、简述线程池处理流程

13、线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?

14、线程池中线程复用原理




选择Java线程与并发里的其中一道解答


volatile

(1)保证被volatile修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。

//线程1
boolean stop = false;
while(!stop)
doSomething();
//线程2
stop = true;

如果线程2改变了stop的值,线程1一定会停止吗?不一定。当线程2更改了stop变量的值之后,但是还没来得及写入主存当中,线程2转去做其他事情了,那么线程1由于不知道线程2对stop变量的更改,因此还会一直循环下去。

(2)禁止指令重排序优化。

int a = 0;
bool flag = false;
public void write()
a = 2; //1
flag = true; //2
public void multiply()
if (flag) //3
int ret = a * a;//4

write方法里的1和2做了重排序,线程1先对flag赋值为true,随后执行到线程2,ret直接计算出结果,再到线程1,这时候a才赋值为2,很明显迟了一步。

但是用volatile修饰之后就变得不一样了

第一:使用volatile关键字会强制将修改的值立即写入主存;

第二:使用volatile关键字的话,当线程2进行修改时,会导致线程1的工作内存中缓存变量stop的缓存行无效(反映到硬件层的话,就是CPU的L1或者L2缓存中对应的缓存行无效);

第三:由于线程1的工作内存中缓存变量stop的缓存行无效,所以线程1再次读取变量stop的值时会去主 存读取。

inc++; 其实是两个步骤,先加加,然后再赋值。不是原子性操作,所以volatile不能保证线程安全。




三、spring

1、如何实现一个IOC容器

2、spring是什么?

3、谈谈你对AOP的理解

4、谈谈你对IOC的理解

5、BeanFactory和ApplicationContext有什么区别?

6、描述一下Spring Bean的生命周期?

7、解释下Spring支持的几种bean的作用域。

8、Spring框架中的单例Bean是线程安全的么?

9、Spring 框架中都用到了哪些设计模式?

10、Spring事务的实现方式和原理以及隔离级别?

11、spring事务传播机制

12、spring事务什么时候会失效?

13、什么是bean的自动装配,有哪些方式?




选择spring里的其中一道解答


谈谈你对AOP的理解

系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。

当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从 上到下的关系,但并不适合定义从左到右的关系。例如日志功能。

日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。

在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP:将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。AOP可以对某个对象或某些对象的功能进行增强,比如对象中的方法进行增强,可以在执行某个方法之前额外的做一些事情,在某个方法执行之后额外的做一些事情




四、springmvc、springBoot、Mybatis

1、Spring Boot、Spring MVC 和 Spring 有什么区别

2、SpringMVC 工作流程

3、Spring MVC的主要组件?

4、Spring Boot 自动配置原理?

5、如何理解 Spring Boot 中的 Starter

6、什么是嵌入式服务器?为什么要使用嵌入式服务器?

7、mybatis的优缺点

8、MyBatis 与Hibernate 有哪些不同?

9、#和$的区别是什么?

10、简述 Mybatis 的插件运行原理,如何编写一个插件。




选择springmvc、springBoot、Mybatis里的其中一道解答


SpringMVC 工作流程

1)用户发送请求至前端控制器 DispatcherServlet。

2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。

4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。

5)HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)

6)Controller 执行完成返回 ModelAndView。

7)HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。8)DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。

9)ViewReslover 解析后返回具体 View。

10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。

11)DispatcherServlet 响应用户。




五、mysql和Redis

1、索引的基本原理

2、mysql聚簇和非聚簇索引的区别

3、mysql索引的数据结构,各自优劣

4、索引设计的原则?

5、什么是最左前缀原则?什么是最左匹配原则

6、锁的类型有哪些

7、InnoDB存储引擎的锁的算法

8、关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?

9、事务的基本特性和隔离级别

10、ACID靠什么保证的?

11、什么是MVCC

12、分表后非sharding_key的查询怎么处理,分表后的排序?

13、mysql主从同步原理

14、简述MyISAM和InnoDB的区别

15、简述mysql中索引类型及对数据库的性能的影响

16、mysql执行计划怎么看




选择MySQL里的其中一道解答


索引的基本原理

索引用来快速地寻找那些具有特定值的记录。如果没有索引,一般来说执行查询时遍历整张表。

索引的原理:就是把无序的数据变成有序的查询

(1) 把创建了索引的列的内容进行排序

(2)对排序结果生成倒排表

(3)在倒排表内容上拼上数据地址链

(4)在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据




六、Redis

1、RDB 和 AOF 机制

2、Redis的过期键的删除策略

3、Redis线程模型、单线程快的原因

4、简述Redis事务实现

5、redis集群方案

6、redis 主从复制的核心原理

7、缓存雪崩、缓存穿透、缓存击穿




选择Redis里的其中一道解答


Redis的过期键的删除策略

Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。

惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的 指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键。)

Redis中同时使用了惰性过期和定期过期两种过期策略。




七、分布式与微服务

1、CAP理论,BASE理论

2、负载均衡算法、类型

3、分布式架构下,Session 共享有什么方案

4、简述你对RPC、RMI的理解

5、分布式id生成方案

6、分布式锁解决方案

7、分布式事务解决方案

8、如何实现接口的幂等性

9、简述ZAB 协议

10、简述zk的命名服务、配置管理、集群管理

11、讲下Zookeeper watch机制

12、zk和eureka的区别

13、Spring Cloud和Dubbo的区别

14、什么是Hystrix?简述实现机制

15、springcloud核心组件及其作用

16、Dubbo 的整体架构设计及分层




选择分布式与微服务里的其中一道解答


Spring Cloud和Dubbo的区别

底层协议:springcloud基于http协议,dubbo基于Tcp协议,决定了dubbo的性能相对会比较好

注册中心:Spring Cloud 使用的 eureka ,dubbo推荐使用zookeeper

模型定义:dubbo 将一个接口定义为一个服务,SpringCloud 则是将一个应用定义为一个服务

SpringCloud是一个生态,而Dubbo是SpringCloud生态中关于服务调用一种解决方案(服务治理)




八、中间件MQ

1、简述RabbitMQ的架构设计

2、RabbitMQ如何确保消息发送 ? 消息接收?

3、RabbitMQ事务消息

4、RabbitMQ死信队列、延时队列

5、RabbitMQ镜像队列机制

6、简述kafka架构设计

7、kafka怎么处理消息顺序、重复发送、重复消费、消息丢失

8、Kafka在什么情况下会出现消息丢失及解决方案?

9、Kafka是pull?push?优劣势分析

10、Kafka中zk的作用

11、简述kafka的rebalance机制

12、Kafka的性能好在什么地方




选择中间件MQ里的其中一道解答


简述kafka架构设计

Consumer Group:消费者组,消费者组内每个消费者负责消费不同分区的数据,提高消费能力。逻 辑上的一个订阅者。

Topic:可以理解为一个队列,Topic 将消息分类,生产者和消费者面向的是同一个 Topic。

Partition:为了实现扩展性,提高并发能力,一个Topic 以多个Partition的方式分布到多个 Broker上,每个 Partition 是一个 有序的队列。一个 Topic 的每个Partition都有若干个副本(Replica),一个Leader 和若干个 Follower。生产者发送数据的对象,以及消费者消费数据的对象,都是 Leader。Follower负责实时从 Leader 中同步数据,保持和 Leader 数据的同步。Leader 发生故障时,某个Follower 还会成为新的 Leader。

Offset:消费者消费的位置信息,监控数据消费到什么位置,当消费者挂掉再重新恢复的时候,可以从 消费位置继续消费。

Zookeeper:Kafka 集群能够正常工作,需要依赖于 Zookeeper,Zookeeper 帮助 Kafka 存储和管理 集群信息。



希望能帮助到你在面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

105道Java面试题答案解析:105道Java面试题完整版


推荐阅读
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • Jenkins API当前未直接提供获取任务构建队列长度的功能,因此需要通过解析HTML页面来间接实现这一需求。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 本教程介绍如何在C#中通过递归方法将具有父子关系的列表转换为树形结构。我们将详细探讨如何处理字符串类型的键值,并提供一个实用的示例。 ... [详细]
  • 在将 Android Studio 从 3.0 升级到 3.1 版本后,遇到项目无法正常编译的问题,具体错误信息为:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDemoProductDebugResources'。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • IO流——字符流 BufferedReader / BufferedWriter 进行文件读写
    目录节点流、处理流读文件:BufferedReader的使用写文件:BufferedWriter的使用节点流处理流节点流和处理流的区别和联系字符流Buf ... [详细]
  • 本文详细介绍了JVM内存分配的相关知识,包括内存规整、内存分配方式以及并发指针碰撞问题的解决方案。 ... [详细]
author-avatar
也许_枉然
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有